package com.lagou.homework03;

import java.util.*;

/**
 * 5. 编程题
 *
 *  使用集合实现斗地主游戏的部分功能，要求如下：
 *
 *  （1）首先准备 54 张扑克牌并打乱顺序。
 *
 *  （2）由三个玩家交替摸牌，每人 17 张扑克牌，最后三张留作底牌。
 *
 *  （3）查看三个玩家手中的扑克牌和底牌。
 *
 *  （4）其中玩家手中的扑克牌需要按照大小顺序打印，规则如下：
 *
 *     手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
 */
public class CardGameTest {
    public static void main(String[] args) {
        //1.创建花色和牌面数组
        String[] type = {"红桃", "黑桃", "梅花", "方块"};
        String[] num  = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};

        //2.创建纸牌集合
        List card = new ArrayList();
        for(int i = 0; i < num.length; i++)    {
            for(int j = 0; j < type.length; j++) {
                card.add(type[j].concat(num[i]));
            }
        }
        System.out.println(card);

        //加入大小王
        card.add(0,"小王");
        card.add(0,"大王");
        //为了方便排序将扑克牌记录到Map集合中
        Map m1 = new HashMap<>();
        for(int i = 0; i < card.size(); i++)    {
            m1.put(i, card.get(i));
        }
        System.out.println(m1);
        //获得一个扑克牌编号集合；
        List lt1 = new ArrayList();
        for(int i = 0 ; i < card.size(); i++)  {
          lt1.add(i);
        }

        //打乱顺序
        Collections.shuffle(lt1);
        //System.out.println(lt1);

        //持牌玩家定义
        List player1 = new ArrayList();
        List player2 = new ArrayList();
        List player3 = new ArrayList();
        List left = new ArrayList();

        //发牌：对3取余数,取编号

            for (int k = 0; k<lt1.size() ; k++) {
                //留出三张牌存到底牌的集合中
                if (k > 50) {
                    left.add(lt1.get(k));
                } else if (k % 3 == 0) {
                    player1.add(lt1.get(k));
                } else if (k % 3 == 1) {
                    player2.add(lt1.get(k));
                } else if (k % 3 == 2) {
                    player3.add(lt1.get(k));
                }
            }
        System.out.println("-----------------------------");

       //

       /* 4）其中玩家手中的扑克牌需要按照大小顺序打印，规则如下：
           手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3*/
       Collections.sort(player1);
        System.out.println("player1的手牌是: ");
        show(m1, player1);
        System.out.println("player2的手牌是: ");
        show(m1, player2);
        System.out.println("player3的手牌是: ");
        show(m1, player3);
        System.out.println("底牌是: ");
        show(m1, left);
    }
    //自定义成员方法打印扑克牌
    public static void show(Map map, List list) {
        Collections.sort(list);
        for(int i = 0; i < list.size(); i++) {
            System.out.print(map.get(list.get(i)) + " ");
        }
        System.out.println();//换行
    }

}
